///**
//Copyright (c) 2007-2013 Alysson Bessani, Eduardo Alchieri, Paulo Sousa, and the authors indicated in the @author tags
//
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
//*/
//package bftsmart.demo.listvalue;
//
//import bftsmart.tom.ServiceProxy;
//
//import java.io.*;
//import java.util.Collection;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.logging.Level;
//import java.util.logging.Logger;
//
///**
// *
// * @author sweta
// */
//public class BFTList implements Map<String, List<String>> {
//
//	ServiceProxy KVProxy = null;
//        private boolean useReadOnly;
//
//	BFTList(int id, boolean useReadOnly) {
//		KVProxy = new ServiceProxy(id, "config");
//                this.useReadOnly = useReadOnly;
//	}
//	ByteArrayOutputStream out = null;
//
//	public List<String> get(String tableName) {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.GET);
//			new DataOutputStream(out).writeUTF(tableName);
//
//			byte[] rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream bis = new ByteArrayInputStream(rep) ;
//			ObjectInputStream in = new ObjectInputStream(bis) ;
//			List<String> table = (List<String>) in.readObject();
//			in.close();
//			return table;
//		} catch (ClassNotFoundException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		}
//
//	}
//
//	public String getEntry(String tableName,int index) {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.GET);
//			new DataOutputStream(out).writeUTF(tableName);
//			new DataOutputStream(out).writeInt(index);
//			byte[] rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream bis = new ByteArrayInputStream(rep) ;
//			ObjectInputStream in = new ObjectInputStream(bis) ;
//			String value = in.readUTF();
//			in.close();
//                        return value;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		}
//	}
//
//
//	public List<String> put(String listName, List<String> value) {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.LIST_CREATE);
//			new DataOutputStream(out).writeUTF(listName);
//			//ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
//			ObjectOutputStream  out1 = new ObjectOutputStream(out) ;
//			if (value != null) {
//                            out1.writeBoolean(true);
//                            out1.writeObject(value);
//                        }
//                        else {
//                            out1.writeBoolean(false);
//                        }
//			out1.close();
//			byte[] rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream bis = new ByteArrayInputStream(rep) ;
//			ObjectInputStream in = new ObjectInputStream(bis) ;
//			List<String> list = (List<String>) in.readObject();
//			in.close();
//			return list;
//
//		} catch (ClassNotFoundException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		}
//	}
//
//	public boolean putEntry(String listName, String value) {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.PUT);
//			new DataOutputStream(out).writeUTF(listName);
//			new DataOutputStream(out).writeUTF(value);
//			byte[] rep = KVProxy.invokeOrdered(out.toByteArray());
//                        System.out.println("blabla1");
//			ByteArrayInputStream bis = new ByteArrayInputStream(rep);
//                        System.out.println("blabla2");
//			DataInputStream in = new DataInputStream(bis);
//                        System.out.println("blabla3");
//			boolean added = in.readBoolean();
//                        System.out.println("blabla4");
//			in.close();
//                        bis.close();
//                        return added;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return false;
//		}
//
//	}
//
//	public List<String> remove(Object key) {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.LIST_REMOVE);
//			new DataOutputStream(out).writeUTF((String) key);
//			byte[] rep = KVProxy.invokeOrdered(out.toByteArray());
//
//			ByteArrayInputStream bis = new ByteArrayInputStream(rep) ;
//			ObjectInputStream in = new ObjectInputStream(bis) ;
//			List<String> list = (List<String>) in.readObject();
//			in.close();
//			return list;
//		} catch (ClassNotFoundException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		}
//
//	}
//
//	public String removeEntry(String tableName,int index)  {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.REMOVE);
//			new DataOutputStream(out).writeUTF((String) tableName);
//			new DataOutputStream(out).writeInt(index);
//			byte[] rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream bis = new ByteArrayInputStream(rep) ;
//			ObjectInputStream in = new ObjectInputStream(bis) ;
//			String rem = in.readUTF();
//			in.close();
//                        return rem;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return null;
//		}
//
//	}
//	public int size() {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.SIZE_TABLE);
//			byte[] rep;
//			if(useReadOnly)
//				rep = KVProxy.invokeUnordered(out.toByteArray());
//			else
//				rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream in = new ByteArrayInputStream(rep);
//			int size = new DataInputStream(in).readInt();
//			return size;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return -1;
//		}
//	}
//
//	public int size1(String tableName) {
//		try {
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.SIZE);
//			new DataOutputStream(out).writeUTF(tableName);
//			byte[] rep;
//			if(useReadOnly)
//				rep = KVProxy.invokeUnordered(out.toByteArray());
//			else
//				rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream in = new ByteArrayInputStream(rep);
//			int size = new DataInputStream(in).readInt();
//			return size;
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return 0;
//		}
//	}
//
//	public boolean containsKey(String key) {
//
//		try {
//
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.LIST_CREATE_CHECK);
//			new DataOutputStream(out).writeUTF((String) key);
//			byte[] rep;
//			if(useReadOnly)
//				rep = KVProxy.invokeUnordered(out.toByteArray());
//			else
//				rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream in = new ByteArrayInputStream(rep);
//			boolean res = new DataInputStream(in).readBoolean();
//			return res;
//
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return false;
//		}
//
//	}
//
//	public boolean containsKey1(String tableName, String key) {
//
//		try {
//
//			out = new ByteArrayOutputStream();
//			new DataOutputStream(out).writeInt(LVRequestType.CHECK);
//			new DataOutputStream(out).writeUTF((String) tableName);
//			new DataOutputStream(out).writeUTF((String) key);
//			byte[] rep;
//			if(useReadOnly)
//				rep = KVProxy.invokeUnordered(out.toByteArray());
//			else
//				rep = KVProxy.invokeOrdered(out.toByteArray());
//			ByteArrayInputStream in = new ByteArrayInputStream(rep);
//			boolean res = new DataInputStream(in).readBoolean();
//			return res;
//
//		} catch (IOException ex) {
//			Logger.getLogger(BFTList.class.getName()).log(Level.SEVERE, null, ex);
//			return false;
//		}
//
//	}
//
//
//
//
//	public boolean isEmpty() {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//
//
//	public boolean containsValue(Object value) {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//	public void putAll(Map m) {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//	public void clear() {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//	public Set keySet() {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//	public Collection values() {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//	public Set entrySet() {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//	public boolean containsKey(Object key) {
//		throw new UnsupportedOperationException("Not supported yet.");
//	}
//
//    @Override
//    public List<String> get(Object key) {
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
//
//
//
//}
//
//
